﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BR_CruzDelSur;
using BR_CruzDelSur.Interfaces;
using System.Web.Services;
using BE_CruzDelSur;
using System.Web.UI.HtmlControls;

namespace WebCruzDelSur
{
    public partial class RegistrarCarga : System.Web.UI.Page
    {
        IBR_Pago pago = new BR_Pago();
        IBR_Carga carga = new BR_Carga();
        IBR_Producto producto = new BR_Producto();
        IBR_Util util = new BR_Util();
        IBR_ProgramacionRuta programacionRuta = new BR_ProgramacionRuta();

        public static List<BE_Producto> lstProd = new List<BE_Producto>();

        [WebMethod]
        public static List<BE_Producto> ObtenerProductos()
        {
            return lstProd;
        }

        [WebMethod]
        public static void AgregarProducto(int codigo, string nombre, string descripcion)
        {
            lstProd.Add(new BE_Producto() { Codigo = codigo, Nombre = nombre, Descripcion = descripcion });
        }

        [WebMethod]
        public static void EliminarProducto(int codigo)
        {
            BE_Producto EliProducto = lstProd.Where(p => p.Codigo == codigo).First();
            lstProd.Remove(EliProducto);            
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (HttpContext.Current.Session["Usuario"] == null)
            {
                String message = "Debe autenticarse en el sistema. ";
                String strJavascriptFunctions = "";
                strJavascriptFunctions = "ShowMessageError('" + message + "');";
                ClientScript.RegisterStartupScript(this.GetType(), "Alerta", strJavascriptFunctions, true);
                return;
            }

            if (!Page.IsPostBack)
            {
                lstProd = new List<BE_Producto>();
                ddlEstado.DataSource = util.f_ListarUtil("C", "ES", false);
                ddlEstado.DataValueField = "Codigo";
                ddlEstado.DataTextField = "Nombre";
                ddlEstado.DataBind();
                ddlEstado.SelectedValue = "IN";

                ddlDepartamento.DataSource = util.f_ListarUtil("", "UD", true);
                ddlDepartamento.DataValueField = "Codigo";
                ddlDepartamento.DataTextField = "Nombre";
                ddlDepartamento.DataBind();

                ddlTipoCarga.DataSource = util.f_ListarUtil("", "TC", false);
                ddlTipoCarga.DataValueField = "Codigo";
                ddlTipoCarga.DataTextField = "Nombre";
                ddlTipoCarga.DataBind();

                ddlTipoPago.DataSource = util.f_ListarUtil("", "TP", false);
                ddlTipoPago.DataValueField = "Codigo";
                ddlTipoPago.DataTextField = "Nombre";
                ddlTipoPago.DataBind();
            }
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            double ancho = util.f_doubleValor(txtAncho.Text);
            double profundidad = util.f_doubleValor(txtProfundidad.Text);
            double largo = util.f_doubleValor(txtLargo.Text);
            double peso = util.f_doubleValor(txtPeso.Text);
            string dniOri = txtDocIdeCli.Text;
            string dniDes = txtDocIdeCliDes.Text;
            string observacion = txtObservaciones.Text;
            int tipocarga = util.f_intValor(ddlTipoCarga.SelectedValue);
            int tipopago = util.f_intValor(ddlTipoPago.SelectedValue);
            int valprogramacionRuta = util.f_intValor(txtCodigoProgramacionRuta.Value);
            
            //BE_Carga entidad = new BE_Carga() { Ancho = ancho, Largo = largo, Profundidad = profundidad, Peso = peso, DNIClienteOrigen = dniOri, DNIClienteDestino = dniDes, Observacion = observacion, TipoCarga = tipocarga, TipoPago = tipopago, CodigoProgramacionRuta = programacionRuta, EstadoCarga = "IN" };

            BE_Carga entidad = carga.f_InsertarCarga(dniOri, dniDes, tipocarga, tipopago, observacion, peso, largo, ancho, profundidad, valprogramacionRuta);

            foreach (var item in lstProd)
            {
                producto.f_InsertarProducto(item.Nombre, item.Descripcion, entidad.CodigoCarga);
            }

            lstProd = new List<BE_Producto>();

            BE_ProgramacionRuta pr = programacionRuta.f_BuscaProgramacionXCodigo(entidad.CodigoProgramacionRuta);
            entidad.ProgramacionRuta = pr;

            String message = "Registro Guardado Correctamente. Se imprimirá el código de Seguridad.";
            String strJavascriptFunctions = "";
            
            if (entidad.TipoPago == 1)
            {
                double total = Metodos.f_calculaMonto(entidad);
                pago.f_InsertarPago(total, "PE", entidad.CodigoCarga.ToString());

                message += "Se imprimirá la orden de pago.";
                strJavascriptFunctions = "ShowMessage('" + message + "');PrintSecureCode('" + entidad.CodigoCarga + "','" + entidad.CodigoSeguridad + "','1');";
            }
            else 
            {
                strJavascriptFunctions = "ShowMessage('" + message + "');PrintSecureCode('" + entidad.CodigoCarga + "','" + entidad.CodigoSeguridad + "','0');";
            }

            ClientScript.RegisterStartupScript(this.GetType(), "Alerta", strJavascriptFunctions, true);

        }

        protected void btnRegresar_Click(object sender, EventArgs e)
        {
            Response.Redirect("BuscarCarga.aspx");
        }
    }
}